import { notFound } from "next/navigation";
import { fetchSanityServiceBySlug, SERVICES_SLUGS_QUERY } from "@/sanity/lib/fetch";
import {
getDynamicFetchOptions,
sanityFetchMetadata,
sanityFetchStaticParams,
type DynamicFetchOptions,
} from "@/sanity/lib/live";
import { SERVICE_QUERY } from "@/sanity/queries/service";
import { draftMode } from "next/headers";
import { Suspense } from "react";
import { ServiceDetailView, type ServiceDetailData } from "@/components/templates";
function PageFallback() {
return (
);
}
const fallbackServices: Record = {
"private-consultant": {
title: "Private Couple Consultation",
slug: "private-consultant",
targetAudience: "couples",
tagline: "1-on-1 unbiased planning navigation, budget stress-testing & vendor contract protection",
shortDescription:
"Designed for international couples planning a destination wedding in Vietnam who need honest insider scrutiny on quotes, vendor selections, and contract terms without conflict of interest.",
pricing: "From $111 USD / Hour",
features: [
"Unbiased venue & region shortlisting (Da Nang, Phu Quoc, Nha Trang, Saigon)",
"Full budget modeling with hidden fee & import tariff audit",
"Vendor contract scrutiny and milestone timeline validation",
"Direct WhatsApp support during critical decision phases",
],
},
"private-consultant-services": {
title: "Private Couple Consultation",
slug: "private-consultant-services",
targetAudience: "couples",
tagline: "1-on-1 unbiased planning navigation, budget stress-testing & vendor contract protection",
shortDescription:
"Designed for international couples planning a destination wedding in Vietnam who need honest insider scrutiny on quotes, vendor selections, and contract terms without conflict of interest.",
pricing: "From $111 USD / Hour",
features: [
"Unbiased venue & region shortlisting (Da Nang, Phu Quoc, Nha Trang, Saigon)",
"Full budget modeling with hidden fee & import tariff audit",
"Vendor contract scrutiny and milestone timeline validation",
"Direct WhatsApp support during critical decision phases",
],
},
"for-couples": {
title: "Private Couple Consultation",
slug: "for-couples",
targetAudience: "couples",
tagline: "1-on-1 unbiased planning navigation, budget stress-testing & vendor contract protection",
shortDescription:
"Designed for international couples planning a destination wedding in Vietnam who need honest insider scrutiny on quotes, vendor selections, and contract terms without conflict of interest.",
pricing: "From $111 USD / Hour",
features: [
"Unbiased venue & region shortlisting (Da Nang, Phu Quoc, Nha Trang, Saigon)",
"Full budget modeling with hidden fee & import tariff audit",
"Vendor contract scrutiny and milestone timeline validation",
"Direct WhatsApp support during critical decision phases",
],
},
"b2b": {
title: "B2B Venue & Partner Advisory",
slug: "b2b",
targetAudience: "professionals",
tagline: "Elevating Vietnamese luxury hospitality to global wedding standards",
shortDescription:
"Consultancy for resorts, hotels, and premium vendors seeking to attract high-net-worth international destination couples and optimize their event yield.",
pricing: "Tailored Engagement on Request",
features: [
"International wedding package & collateral experience audit",
"Cross-cultural bridal expectations & culinary protocol training",
"B2B partner matchmaking and editorial showcase opportunities",
"Market positioning & high-ticket revenue model design",
],
},
"b2b-advisory": {
title: "B2B Venue & Partner Advisory",
slug: "b2b-advisory",
targetAudience: "professionals",
tagline: "Elevating Vietnamese luxury hospitality to global wedding standards",
shortDescription:
"Consultancy for resorts, hotels, and premium vendors seeking to attract high-net-worth international destination couples and optimize their event yield.",
pricing: "Tailored Engagement on Request",
features: [
"International wedding package & collateral experience audit",
"Cross-cultural bridal expectations & culinary protocol training",
"B2B partner matchmaking and editorial showcase opportunities",
"Market positioning & high-ticket revenue model design",
],
},
"for-professionals": {
title: "B2B Venue & Partner Advisory",
slug: "for-professionals",
targetAudience: "professionals",
tagline: "Elevating Vietnamese luxury hospitality to global wedding standards",
shortDescription:
"Consultancy for resorts, hotels, and premium vendors seeking to attract high-net-worth international destination couples and optimize their event yield.",
pricing: "Tailored Engagement on Request",
features: [
"International wedding package & collateral experience audit",
"Cross-cultural bridal expectations & culinary protocol training",
"B2B partner matchmaking and editorial showcase opportunities",
"Market positioning & high-ticket revenue model design",
],
},
};
export async function generateStaticParams() {
try {
const { data: services } = (await sanityFetchStaticParams({
query: SERVICES_SLUGS_QUERY,
})) as { data: any[] };
const slugs = (services ?? [])
.map((service) => ({
slug: service.slug?.current,
}))
.filter((item): item is { slug: string } => Boolean(item.slug));
if (slugs.length > 0) {
return slugs;
}
} catch (err) {
// ignore
}
return [
{ slug: "private-consultant" },
{ slug: "private-consultant-services" },
{ slug: "for-couples" },
{ slug: "b2b" },
{ slug: "b2b-advisory" },
{ slug: "for-professionals" },
];
}
export async function generateMetadata(props: {
params: Promise<{ slug: string }>;
}) {
const { slug } = await props.params;
try {
const { perspective } = await getDynamicFetchOptions();
const { data: service } = (await sanityFetchMetadata({
query: SERVICE_QUERY,
params: { slug },
perspective,
})) as { data: any };
if (service) {
return {
title: `${service.title} | Vietnam Wedding Guide Advisory`,
description: service.shortDescription || service.tagline,
};
}
} catch (err) {
// ignore
}
const fallback = fallbackServices[slug];
if (fallback) {
return {
title: `${fallback.title} | Vietnam Wedding Guide Advisory`,
description: fallback.shortDescription || fallback.tagline,
};
}
return {
title: "Advisory Services | Vietnam Wedding Guide",
description: "Bespoke destination wedding advisory services for couples and hospitality brands.",
};
}
export default async function ServicePage(props: {
params: Promise<{ slug: string }>;
}) {
const { isEnabled: isDraftMode } = await draftMode();
if (isDraftMode) {
return (
}>
);
}
const { slug } = await props.params;
return ;
}
async function DynamicServicePage({
params,
}: {
params: Promise<{ slug: string }>;
}) {
const [{ slug }, { perspective, stega }] = await Promise.all([
params,
getDynamicFetchOptions(),
]);
return ;
}
async function CachedServicePage({
slug,
perspective,
stega,
}: { slug: string } & DynamicFetchOptions) {
let service: ServiceDetailData | null = await fetchSanityServiceBySlug({ slug, perspective, stega });
if (!service) {
service = fallbackServices[slug] || null;
}
if (!service) {
notFound();
}
return ;
}